package com.xsdl.factory;

import java.util.Map;

public class RuleConfigParserFactory {

    private static final Map<String, IRuleConfigParser> cachedParsers = Map.of(
            "json", new JsonRuleConfigParser(),
            "xml", new XmlRuleConfigParser(),
            "yaml", new YamlRuleConfigParser(),
            "properties", new PropertiesRuleConfigParser()
    );

    public static IRuleConfigParser createParser(String configFormat) {
        if (configFormat == null || configFormat.isEmpty()) {
            throw new IllegalArgumentException("configFormat should not be empty");
        }
        IRuleConfigParser parser = cachedParsers.get(configFormat.toLowerCase());

        if ("json".equalsIgnoreCase(configFormat)) {
            parser = new JsonRuleConfigParser();
        } else if ("xml".equalsIgnoreCase(configFormat)) {
            parser = new XmlRuleConfigParser();
        } else if ("yaml".equalsIgnoreCase(configFormat)) {
            parser = new YamlRuleConfigParser();
        } else if ("properties".equalsIgnoreCase(configFormat)) {
            parser = new PropertiesRuleConfigParser();
        }

        if (parser == null) {
            throw new IllegalArgumentException("Rule config parser is not supported for " + configFormat);
        }
        return parser;
    }

}
